Apache benchmark – одна из самых простых утилит для нагрузочного тестирования сайта. Поставляется она вместе с веб сервером apache и не нуждается в настройке. Главная задача apache benchmark – показать, как много запросов сможет выполнить веб сервер и как быстро они выполняются.

Нагрузочное тестирование сайта через apache benchmark

Пример запуска теста на основе apache benchmark:

ab -c 10 -n 10 http://mysitename.local/

Пример запуска теста apache benchmark для denwer:

z:
cd /usr/local/apache/bin/
ab -c 10 -n 10 http://mysitename.local/

Где -с 10 - количество параллельных запросов, -n 10 - общее число запросов, http://mysitename.local/ – тестируемый сайт.

Пример выполнения:

This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking mysitename.local (be patient).....done


Server Software: Apache/2.2.22
Server Hostname: mysitename.local
Server Port: 80

Document Path: /
Document Length: 110881 bytes

Concurrency Level: 10
Time taken for tests: 1.733 seconds
Complete requests: 10
Failed requests: 9
(Connect: 0, Receive: 0, Length: 9, Exceptions: 0)
Write errors: 0
Total transferred: 1112916 bytes
HTML transferred: 1108836 bytes
Requests per second: 5.77 [#/sec] (mean)
Time per request: 1733.099 [ms] (mean)
Time per request: 173.310 [ms] (mean, across all concurrent requests)
Transfer rate: 627.10 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.3 0 1
Processing: 1261 1477 199.6 1567 1732
Waiting: 1248 1461 197.9 1553 1723
Total: 1261 1477 199.7 1568 1732

Percentage of the requests served within a certain time (ms)
50% 1568
66% 1640
75% 1641
80% 1724
90% 1732
95% 1732
98% 1732
99% 1732
100% 1732 (longest request)

Тут нас интересуют следующие строки:

Time taken for tests - общее время тестирования.

Complete requests - количество выполненных запросов.

Failed requests - количество неудачных запросов, 0 - сервер выдержал заданную нагрузку

Requests per second - количество запросов в секунду.

Time per request - втечении этого времени выполнились 10 параллельных запросов

Time per request - среднее время выполнения одного запроса

Percentage of the requests served within a certain time (ms) - доля запросов на единицу времени. Тут видно, что 50% запросов выполнились за 1,5 секунды, а самый долгий запрос выполнялся 1,7 секунды.

Изменяя параметры -n и -c можно отслеживать поведение сервера под нагрузкой.

Наиболее полезные Ключи:

-nrequestsКоличество запросов, которое надо выполнить
-cconcurrencyКол-во одновременных запросов
-ttimelimitМаксимальное время ожидания ответа
-bwindowsizeРазмер буфера TCP send/receive, в байтах
-ppostfileФайл, содержащий данные для построения POST-запроса. Требуется использование ключа -T
-uputfileФайл, содержащий данные для построения PUT-запроса. Требуется использование ключа -T
-Tcontent-typeЗаголовок с указанием content-type, например: 'application/x-www-form-urlencoded'. По-умолчанию используется 'text/plain'
-vverbosityHow much troubleshooting info to print
-wВыводить результат в HTML
-iИспользовать HEAD вместо GET
-Xproxy:portИспользовать прокси-сервер
-VПоказать версию Apache Bench и выйти
-hПоказать список ключей

Больше информации на странице разработчика здесь